package com.itqf.dynamic_proxy1.factory;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.InvocationHandler;

import java.lang.reflect.Method;

/**
 * @Description:
 * @Company: 千锋互联
 * @Author: 李丽婷
 * @Date: 2021/1/14
 * @Time: 上午11:42
 */
public class MyCglibProxtFactory {


    public static Object createProxy(Object target){

        //1,被代理对象Object target
        //2，创建字节码增强对象  cglib.proxy
        Enhancer enhancer = new Enhancer();

        //3.设置代理对象的父类
        enhancer.setSuperclass(target.getClass());
        //4.设置回调方法  （代理对象会调用）
        //org.springframework.cglib.proxy
        enhancer.setCallback(new InvocationHandler() {
            /**
             *
             * @param o 代理对象
             * @param method  目标方法
             * @param objects 参数
             * @return
             * @throws Throwable
             */
            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                Object r =null;
                try {
                    System.out.println("开启事务");//前  增强
                        //目标方法
                     r =    method.invoke(target,objects);
                    System.out.println(r);
                    System.out.println("提交事务");

                } catch (Exception e) {
                    System.out.println("回滚事务");
                }

                return r;
            }
        });

        //5.创建代理对象
        return enhancer.create();



    }

}
